package com.yyy.lambda;

import java.util.function.Function;

public class TestFunction {


    public static void main(String[] args) {

        demo5();
        f1.apply(10);
        //组合函数 apply(before.apply(v)); 所以是先执行 f2.apply(10) 然后再执行 f1.apply(20)
        Integer apply1 = f1.compose(f2).apply(10);
        Integer apply2 = f2.compose(f1).apply(10);
        System.out.println(apply1);
        System.out.println(apply2);

        //这个恰好相反, 先执行 f1.apply(10) 然后再执行 f2.apply(20)
        Integer apply3 = f1.andThen(f2).apply(10);
        Integer apply4 = f2.andThen(f1).apply(10);
        System.out.println(apply3);
        System.out.println(apply4);

    }


    public static void demo5() {
        Function<Integer, String> function = (x) -> {
            return "result:" + x;
        };
        System.out.println(function.apply(10));
    }

    //第一个是参数 第二个是返回值
    static Function<Integer, Integer> f1 = (x) -> x + 1;

    static Function<Integer, Integer> f2 = (x) -> x * 2;


}
